package com.yf.repo.modules.qu.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yf.base.api.api.dto.BaseBatchReqDTO;
import com.yf.base.api.api.dto.PagingReqDTO;
import com.yf.repo.modules.qu.dto.QuDTO;
import com.yf.repo.modules.qu.dto.export.QuExportDTO;
import com.yf.repo.modules.qu.dto.ext.QuDetailDTO;
import com.yf.repo.modules.qu.dto.request.ChapterGroupReqDTO;
import com.yf.repo.modules.qu.dto.request.ChapterJoinReqDTO;
import com.yf.repo.modules.qu.dto.request.LevelSetReqDTO;
import com.yf.repo.modules.qu.dto.request.QuQueryReqDTO;
import com.yf.repo.modules.qu.entity.Qu;
import com.yf.repo.modules.repo.dto.response.ChapterGroupDTO;

import java.util.List;

/**
 * <p>
 * 问题题目业务类
 * </p>
 *
 * @author 聪明笨狗
 * @since 2020-05-25 13:23
 */
public interface QuService extends IService<Qu> {

    /**
     * 分页查询数据
     *
     * @param reqDTO
     * @return
     */
    IPage<QuDTO> paging(PagingReqDTO<QuQueryReqDTO> reqDTO);


    /**
     * 分页查找题目，包含了选项内容的
     *
     * @param reqDTO
     * @return
     */
    IPage<QuDetailDTO> pagingWithAnswer(PagingReqDTO<QuQueryReqDTO> reqDTO);


    /**
     * 根据章节分组查找数据，用于抽题组卷弹窗
     *
     * @param req
     * @param excludes
     * @return
     */
    List<QuDetailDTO> listWithChapterGroup(ChapterGroupDTO req, List<String> excludes);

    /**
     * 根据章节分组查找数据，用于抽题组卷弹窗
     *
     * @param reqDTO
     * @return
     */
    List<QuDetailDTO> listWithChapterGroup(ChapterGroupReqDTO reqDTO);

    /**
     * 问题详情
     *
     * @param id
     * @return
     */
    QuDetailDTO detail(String id);

    /**
     * 保存题目
     *
     * @param reqDTO
     */
    void save(QuDetailDTO reqDTO);

    /**
     * 保存题目，题目、答案等都用的JSON格式
     *
     * @param reqDTO
     */
    void saveJson(List<Qu> reqDTO, String courseId, String userId);

    /**
     * 查找导出列表
     *
     * @param query
     * @return
     */
    List<QuExportDTO> listForExport(QuQueryReqDTO query);

    /**
     * 导入Excel
     *
     * @param list
     * @param repoId
     * @return
     */
    void importExcel(List<QuExportDTO> list, String repoId);

    /**
     * 批量删除
     *
     * @param ids
     */
    void delete(List<String> ids);


    /**
     * 查找试题ID列表
     *
     * @param repoId
     * @param quType
     * @param rand
     * @return
     */
    List<Qu> listForTrain(String repoId, String quType, boolean rand);

    /**
     * 根据主题查找
     * @param refId
     * @return
     */
    List<Qu> listByRef(String refId);

    /**
     * 批量加入章节
     *
     * @param reqDTO
     */
    void joinChapters(ChapterJoinReqDTO reqDTO);

    /**
     * 清理章节
     *
     * @param reqDTO
     */
    void clearChapters(ChapterJoinReqDTO reqDTO);

    /**
     * 批量设置难易程度
     *
     * @param reqDTO
     */
    void batchLevel(LevelSetReqDTO reqDTO);

    /**
     * 批量转移题库
     *
     * @param reqDTO
     */
    void batchRepo(BaseBatchReqDTO reqDTO);

    /**
     * 根据题库统计
     *
     * @param repoId
     * @return
     */
    int countByRepo(String repoId);

    /**
     * 查找全部子题目
     *
     * @param quId
     * @return
     */
    List<QuDetailDTO> listSub(String quId);

    /**
     * 保存或修改返回Id
     * @param reqDTO
     * @return
     */
    String saveById(QuDetailDTO reqDTO);
}
